package br.com.edoc.gerentes;

import java.util.List;




import br.com.edoc.anotation.Consulta;
import br.com.edoc.anotation.SaveOrUpdate;
import br.com.edoc.entidade.EntidadePadrao;
import br.com.edoc.excecoes.ExceptionApplication;
import br.com.edoc.excecoes.ExceptionValidador;
import br.com.edoc.validador.ValidadorPadrao;

public interface GerentePadrao {
	@SaveOrUpdate
	public void incluir(EntidadePadrao obj) throws ExceptionApplication,ExceptionValidador;
	@SaveOrUpdate
	public void alterar (EntidadePadrao obj)  throws ExceptionApplication,ExceptionValidador ;
	@SaveOrUpdate
	public abstract void deletar (EntidadePadrao obj) throws  ExceptionApplication;
	
	@Consulta
	public <T extends EntidadePadrao> List<T> obterListaEntidade(Class<T> classe,EntidadePadrao obj)   throws ExceptionApplication;
	
	@Consulta
	public <T extends EntidadePadrao> List<T> obterListaEntidade(Class<T> classe,EntidadePadrao obj,String ordenador)  throws ExceptionApplication;
	
	@Consulta
	public <T extends EntidadePadrao>  List<T> obterListaEntidade(Class<T> classe,EntidadePadrao obj,Integer quantMaxResult)  throws ExceptionApplication;
	
	@Consulta
	public <T extends EntidadePadrao> List<T> obterListaEntidade(Class<T> classe,EntidadePadrao obj,String ordenador,Integer quantMaxResult)   throws ExceptionApplication;
	
	@Consulta
	public <T extends EntidadePadrao> EntidadePadrao obterEntidadeForId(Class<T> obj,Integer id)throws ExceptionApplication ;
	
	public void setValidador(ValidadorPadrao validador);
	
}
